SpringBoot

您所在的位置:网站首页 restful get 参数 SpringBoot

SpringBoot

2024-07-16 05:39| 来源: 网络整理| 查看: 265

  利用 Spring Boot 来制作 Web 应用,就必定会涉及到前端与后台之间互相传递参数。下面演示 Controller 如何接收以 GET 方式传递过来的参数。

一、直接在请求路径中

(1)、假设请求地址是如下这种 RESTful 风格,Springboot 这个参数值直接放在路径里面

http://localhost:8080/hello/Springboot

(2)、Controller 定义,如下:

@RestController public class HelloController { @GetMapping("/hello/{name}") public String hello(@PathVariable("name") String name){ return "你好," + name + " !"; } }

 

二、参数跟在 ? 号后面 1,获取参数的基本方法

(1)假设请求地址是如下这种传统方式,参数跟在问号后面:

http://localhost:8080/hello?name=Springboot

(2)Controller 定义如下所示:

@RestController public class HelloController { @GetMapping("/hello") public String hello(@RequestParam("name") String name){ return "你好," + name + " !"; } }

可以把在注解 @RequestParam 添加  required = false 设置参数为非必输项可以把在注解 @RequestParam 添加  defaultValue 参数 设置默认值。 2、使用 map 来接收参数

(1)Controller 还可以直接使用 map 来接收所有的请求参数:

@RestController public class HelloController { @GetMapping("/hello") public String hello(@RequestParam Map map){ return "图书: " + map.get("name") + " 的作者为: " + map.get("author"); } }

(2)、结果如下所示:

 4、接收一个集合

(1)、Controller 定义接收 数组或者List的方法,如下:

@RestController public class HelloController { @GetMapping("/array") public String array(@RequestParam("name") String[] names){ System.out.println("我是数组接收的参数:" + Arrays.toString(names)); return "我是数组接收的参数:" + Arrays.toString(names); } @GetMapping("/list") public String list(@RequestParam("name")List names){ System.out.println("我是List接收的参数:" + names); return "我是List接收的参数:" + names.toString(); } }

(2)、测试结果

5、通过对象接收参数

如果一个 get 请求的参数太多,我们构造一个对象来简化参数的接收方式。

(1)、定义一个基本对象Book 和 Controller

public class Book { private String name; private String author; private Double price; // 省略 getter setter 方法 } @RestController public class BookController { @GetMapping("/book") public Book book(Book book){ System.out.println("接收到的参数为:" + book); return book; } }

 (2)、基本用法:

(3)、构造多个对象来接收参数,代码如下所示:

public class User { private String username; private String password; // 省略 getter setter 方法 } @RestController public class BookController { @GetMapping("/book") public Book book(Book book, User user){ System.out.println("接收到的参数为:" + book); System.out.println("接收到的参数为:" + user); return book; } }

访问:

输出结果:

 

(4)、指定前缀。

如果在多个对象参数的方法中,对象之间存在相同的 属性时 可以结合  @InitBinder 指定前缀的方式处理。如下所示,Book 对象和 Author 对象中都存在 name 属性。

    除了在 Controller 里单独定义预处理方法外,我们还可以通过 @ControllerAdvice 结合 @InitBinder 来定义全局的参数预处理方法,方便各个 Controller 使用

public class Book { private String name; private String author; } public class Author { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Author{" + "name='" + name + '\'' + '}'; } }

 

@RestController public class BookController { @GetMapping("/book") public Book book(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author){ System.out.println("接收到的参数为:" + book); System.out.println("接收到的参数为:" + author); return book; } // 添加 InitBinder 指定 前缀 b @InitBinder("b") private void initBinderB(WebDataBinder binder) { binder.setFieldDefaultPrefix("b."); } // 添加 InitBinder 指定 前缀 a @InitBinder("a") private void initBinderA(WebDataBinder binder) { binder.setFieldDefaultPrefix("a."); } }

 

访问:

结果:

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3